import axios from 'axios';
import { Message } from 'element-ui';
import router from '@/router';
import logger from './logger';

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 记录请求日志
    logger.debug(`API请求: ${config.method?.toUpperCase()} ${config.url}`, {
      params: config.params,
      data: config.data
    });
    
    // 添加认证token
    const token = localStorage.getItem('user_token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    
    // 添加请求时间戳（防止缓存）
    if (config.method === 'get') {
      config.params = {
        ...config.params,
        _t: Date.now()
      };
    }
    
    return config;
  },
  error => {
    logger.error('请求拦截器错误', { error: error.message });
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    const { data, config } = response;
    
    // 记录成功响应日志
    logger.debug(`API响应成功: ${config.url}`, {
      status: response.status,
      code: data.code
    });
    
    // 根据后端返回格式处理
    if (data.code === 200 || data.success) {
      return data;
    } else {
      // 业务逻辑错误
      logger.warn(`业务逻辑错误: ${config.url}`, {
        code: data.code,
        message: data.message
      });
      
      Message.error(data.message || '操作失败');
      return Promise.reject(new Error(data.message || 'Error'));
    }
  },
  error => {
    const errorInfo = {
      url: error.config?.url,
      method: error.config?.method,
      status: error.response?.status,
      message: error.message,
      response: error.response?.data
    };
    
    logger.error('API请求失败', errorInfo);
    
    // 统一错误处理
    if (error.response) {
      switch (error.response.status) {
      case 400:
        Message.error('请求参数错误');
        break;
      case 401:
        Message.error('登录已过期，请重新登录');
        localStorage.removeItem('user_token');
        localStorage.removeItem('user_info');
        router.push('/login');
        break;
      case 403:
        Message.error('没有操作权限');
        break;
      case 404:
        Message.error('请求资源不存在');
        break;
      case 500:
        Message.error('服务器内部错误');
        break;
      case 502:
        Message.error('网关错误');
        break;
      case 503:
        Message.error('服务不可用');
        break;
      default:
        Message.error('网络错误，请稍后重试');
      }
    } else if (error.message.includes('timeout')) {
      Message.error('请求超时，请检查网络');
    } else if (error.message.includes('Network Error')) {
      Message.error('网络连接错误，请检查网络设置');
    } else {
      Message.error('未知错误，请稍后重试');
    }
    
    return Promise.reject(error);
  }
);

export default service;